package com.up.cloudfeiyibackend.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

/**
 * Jwt工具类
 */
public class JwtUtil {

    /**
     * 生成 JWT
     *
     * @param secretKey 签名密钥
     * @param ttlMillis 过期时间
     * @param claims 负载数据
     * @return
     */
    public static String createJwt(String secretKey, long ttlMillis, Map<String, Object> claims){
        long nowMillis = System.currentTimeMillis();
        Date now = new Date(nowMillis);
        Date exp = new Date(nowMillis + ttlMillis);

        return Jwts.builder()
                .setClaims(claims) // 负载数据
                .setIssuedAt(now) // 签发时间
                .setExpiration(exp) // 过期时间
                .signWith(SignatureAlgorithm.HS256,secretKey.getBytes(StandardCharsets.UTF_8)) // 签名算法及密钥
                .compact();
    }

    /**
     * 解析 JWT
     *
     * @param secretKey 签名密钥
     * @param token JWT 字符串
     * @return
     */
    public static Claims parseJwt(String secretKey, String token){
        return Jwts.parser()
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                .parseClaimsJws(token)
                .getBody();
    }
}
